package io.adrainty.bolee.file.repository;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.adrainty.bolee.file.models.entity.FileEntity;
import io.adrainty.bolee.file.models.entity.FilePartEntity;

import java.util.Collection;
import java.util.List;

/**
 * @author AdRainty
 * @version V1.0.0
 * @since 2025/8/17 下午11:48
 */
public interface IFileRepository {

    /**
     * 分页查询文件列表
     * @param pageNum 页码
     * @param pageSize 页大小
     * @param param 查询参数
     * @return 文件列表
     */
    IPage<FileEntity> pageFile(Integer pageNum, Integer pageSize, FileEntity param);

    /**
     * 保存文件信息
     * @param param 文件信息
     * @return 文件信息
     */
    FileEntity saveFileBO(FileEntity param);

    /**
     * 保存文件分片信息
     * @param filePartVO 文件分片信息
     */
    void saveFilePart(FilePartEntity filePartVO);

    /**
     * 根据上传ID删除文件分片信息
     * @param uploadId 上传ID
     */
    void deleteFilePartByUpLoadId(String uploadId);

    /**
     * 更新文件上传状态
     *
     * @param fileVO 文件信息
     */
    void updateUpdateStatus(FileEntity fileVO);

    /**
     * 获取需要清理的文件列表
     * @return 文件列表
     */
    List<FileEntity> getNeedClearFileList();

    /**
     * 批量删除文件
     * @param fileListIds 文件列表ID
     */
    void deleteBatchFile(List<Long> fileListIds);

    /**
     * 根据文件ID获取文件信息
     * @param fileId 文件ID
     * @return 文件信息
     */
    FileEntity getFile(Long fileId);

    /**
     * 根据业务ID获取文件列表
     * @param businessId 业务ID
     * @return 文件列表
     */
    List<FileEntity> getFileListByBusinessId(Long businessId);

    /**
     * 根据业务ID批量获取文件列表
     * @param businessIds 业务ID列表
     * @return 文件列表
     */
    List<FileEntity> getFileListByBusinessIds(List<Long> businessIds);

    /**
     * 根据文件ID获取文件列表
     * @param delIdList 文件ID列表
     * @return 文件列表
     */
    List<FileEntity> getFileListById(Collection<Long> delIdList);


    /**
     * 批量绑定文件
     * @param bindFileList 文件列表
     */
    void updateBindFile(List<FileEntity> bindFileList);

}
